一篇文章搞定 java 中的 path 和 classpath 您所在的位置:网站首页 java main方法怎么写 一篇文章搞定 java 中的 path 和 classpath

一篇文章搞定 java 中的 path 和 classpath

2024-01-29 17:03| 来源: 网络整理| 查看: 265

1.path

1.1 path 作用

设置 path 是为了方便使用 java、javac等这些命令而不用写全路径。 如:

在这里插入图片描述在这里插入图片描述2. classpath2.1 classpath 的作用

jar 包的搜索路径,告诉应用程序去哪里寻找 class。默认为当前目录。在实际的应用时,一般不需要设置 classpath。

2.2 classpath的使用方式2.2.1 通配符

1. 匹配所有 .jar 或者 .JAR

如 -cp mydir/* 用来查找 mydir 下所有 .jar或者.JAR结尾的文件。仅仅是查找 mydir 下的,不会去查找 mydir 子目录

2.匹配所有 .jar或者.JAR以及 class files (如:cat.class) -cp mydir:mydir/* or mydir/:mydir 注意它们是有顺序的,mydir:mydir/ 会先加载 classes files 再加载 jar files

2.2.2 直接通过 jar 包

-cp mydir/a.jar:mydir/b.jar:mydir/c.jar

2.2.3 加载 class files

( 可以忽略,在实际项目中根本不会用这种方式,因为有 idea 等工具的存在,所以重点来体会一下工具为我们做了什么 )

目录结构

在这里插入图片描述在这里插入图片描述//package test; /** * @author shengjk1 * @date 2020/4/8 */ public class Test2 { public static void main(String[] args) { System.out.println("Hello Wrold"); } }

没有包名的时候

javac 执行成功,java 执行失败,并报 Could not find or load main class 。因为 classpath 默认为当前目录,当前是 iss 的 home 目录并未发现 Test2.class。故设置 classpath 重新执行javac 执行成功,java 执行失败,并报 Could not find or load main class 。因为 classpath 默认为当前目录,当前是 iss 的 home 目录并未发现 Test2.class。故设置 classpath 重新执行package test; /** * @author shengjk1 * @date 2020/4/8 */ public class Test2 { public static void main(String[] args) { System.out.println("Hello Wrold"); } }

加上包名

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

我们可以发现 java 以及 java -cp ./ 不管用了。发生了什么? 关键在于 package,package就表示在这个路径下去找这个类,当执行 java Test2 时,它会在 ./test 目录下查找,但根本就没有这个目录,故

Could not find or load main class

我们来指定 classpath

在这里插入图片描述在这里插入图片描述

接下来呢,让 Test1去引用 Test2

package test; import java.util.ArrayList; /** * @author shengjk1 * @date 2020/1/19 */ public class Test1 { public static void main(String[] args) { Test2.main(args); } }在这里插入图片描述在这里插入图片描述

在 Test1 中引入第三方的依赖 kudu

package test; import org.apache.kudu.client.KuduTable; import java.lang.ref.SoftReference; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; /** * @author shengjk1 * @date 2020/1/19 */ public class Test1 { public static void main(String[] args) { ArrayList integers = new ArrayList(); integers.add(192); integers.add(191); Map kuduTableMap = new HashMap(); Test2.main(args); } }在这里插入图片描述在这里插入图片描述2.3 classpath的应用场景打包是没有指定主类,可以用java -cp xxx.jar 主类名称(绝对路径)要引用其他的jar包,可以用java -classpath $CLASSPATH:xxxx.jar 主类名称(绝对路径)3. idea等工具究竟为我们做了什么

当我们使用idea的时候只需要

在这里插入图片描述在这里插入图片描述

就可以运行一个包含 main 方法的 .java 文件,简单方便。可是为什么呢?

通过上面的例子我们可以知道,要想正常的编译执行 .java 文件,需要两个条件: 1.必须的 jar 包 2.class files 的正确路径 那么我们就来看一下 idea 是否满足这两个条件。

首先必须要有必须的 jar

在这里插入图片描述在这里插入图片描述

我们所依赖的 jar 也都被放进了 classpath

在这里插入图片描述在这里插入图片描述

所以基本 jar 依赖的问题就解决了, 其次,我们需要正确的 class files 路径。

在这里插入图片描述在这里插入图片描述

设置了 build 后的路径为 ${PROJECT_ROOT}/target。

在这里插入图片描述在这里插入图片描述

设置了 target 的文件路径。通过这两个设置,保证我们自己写的.java 文件的正确路径。至此我们执行

在这里插入图片描述在这里插入图片描述

它就可以正确的跑起来了。

4. 参考

PATH and CLASSPATH Setting the Class Path



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有